package com.sysef.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import com.sysef.exception.*;
import com.sysef.modelo.*;
import com.sysef.util.*;

public class DAOOferta extends BaseDAO {
	
	public Collection<BeanOferta> listarOfertas() throws DAOExcepcion {
		// Rango configurado por el administrador
		String fechaInicio 	= "2012-11-01";
		String fechaFin 	= "2012-11-03";
		/* Armo mi query */
		/* Los signos ? son reemplazados por: (1) */
		String query = "SELECT idOferta, descripcionOferta, fechaInicio, fechaFin FROM tb_oferta " +
				"where fechaInicio > ? and fechaFin < ?";
		/* Inicializa */
		Collection<BeanOferta> listOfertas = new ArrayList<BeanOferta>();
		Connection oConnection = null;
		PreparedStatement oStatement = null;
		ResultSet oResultSet = null;
		try {
			oConnection = ConexionBD.obtenerConexion();
			oStatement = oConnection.prepareStatement(query);
			/* Estos valores reemplazan los signos ? */
			oStatement.setString(1, fechaInicio);
			oStatement.setString(2, fechaFin);
			/* ejecuta query y llena mi objeto ResultSet*/
			oResultSet = oStatement.executeQuery();
			
			/* Recorre mi lista de ofertas obtenida de BD */
			while (oResultSet.next()) {
				/* Instancia objeto y setea valores */
				BeanOferta o = new BeanOferta();
				o.setIntIdOferta(oResultSet.getInt("idOferta"));
				o.setStrDescripcionOferta(oResultSet.getString("descripcionOferta"));
				o.setDateFechaInicioOferta(oResultSet.getDate("fechaInicio"));
				o.setDateFechaFinOferta(oResultSet.getDate("fechaFin"));
				
				//Agrego mi Objeto Oferta en mi lista de Ofertas
				listOfertas.add(o);
			}
			
		} catch (SQLException e) {
			/* Mensajes de error */
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			/* Cierro objetos de acceso a datos */
			this.cerrarResultSet(oResultSet);
			this.cerrarStatement(oStatement);
			this.cerrarConexion(oConnection);
		}
		/* Devuelvo mi lista de ofertas obtenidas */
		return listOfertas;
	}

}
